package ec.linde.modulos.presupuestos;

import java.io.Serializable;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.logging.Level;

import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.bean.ViewScoped;

import org.primefaces.context.RequestContext;

import ec.linde.modulos.recursos.ExceptionClass;
import ec.linde.modulos.recursos.Mensaje;
import ec.linde.modulos.recursos.MensajeContext;
import ec.linde.modulos.recursos.ParametrosWeb;
import ec.linde.modulos.recursos.RegistrarAuditoria;
import ec.linde.modulos.seguridades.AccesoSistemaBean;
import ec.linde.modulos.seguridades.EjbAdminSeguridadBean;
import ec.linde.persistencia.entidades.Auditoria;
import ec.linde.persistencia.entidades.ProdCabeceraProforma;
import ec.linde.persistencia.entidades.ProdConfigBasPresupues;

@ManagedBean(name = "clonarOfertasBean")
@SessionScoped
public class ClonarOfertasBean implements Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	@EJB
	private EjbClonarOfertaBean servicioClonarOfertasBean = null;
	@EJB
	private EjbAdminSeguridadBean servicioAdminSeguridadBean = null;
	private MensajeContext contextoUsuario = new MensajeContext();
	private MensajeContext contextoMensaje = new MensajeContext();
	private Mensaje mensaje = new Mensaje();
	AccesoSistemaBean usuarioLogueado = new AccesoSistemaBean();
	RegistrarAuditoria auditoria = new RegistrarAuditoria();
	private int idOferta = 0;
	private String numeroOfertaOriginal;
	private String generarPdf = "N";
	private String viendeDe = "BIT";
	private ProdCabeceraProforma prodCabeceraProforma = new ProdCabeceraProforma();
	private ProdCabeceraProforma prodCabeceraProformaModificar = new ProdCabeceraProforma();
	private ProdCabeceraProforma prodCabeceraProformaVisualizar = new ProdCabeceraProforma();
	private ProdCabeceraProforma prodCabeceraProformaSeleccionado = new ProdCabeceraProforma();
	private ProdConfigBasPresupues prodConfigBasPresupues = new ProdConfigBasPresupues();
	private boolean habilitarBoton = true;
	private String nombreBase = null;
	private int codigoBasePresupeustal = -1;
	private String mostrarPanel = null;
	//
	private String codigoDKP = null;
	private int numeroOferta = 0;
	private int codCliente = 0;
	private String nombreCiente = null;
	private String direccionCliente = null;
	private Date fechaRegistroOferta;
	private String nombrePresupuestador = null;
	private String tiempoValidezOferta = null;
	private String detalleOferta = null;
	private int codEstadoOferta = 0;
	private int codSucursal = -1;
	private String codTipoPresupuesto = null;
	private int codResponsableComercial = -1;
	private String tiempoEjecucion = null;
	private String codTipoOperacion = null;
	private String fechaMasHoraActual = null;

	private boolean mostrarBotonVentana = true;

	//

	public ClonarOfertasBean() {
		usuarioLogueado = (AccesoSistemaBean) contextoUsuario
				.getFaceContextMensaje("accesoSistemaBean");
		fechaMasHoraActual = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss")
				.format(new Date());
		nombrePresupuestador = usuarioLogueado.getUsuarioLogueado()
				.getUsuaNombres()
				+ " "
				+ usuarioLogueado.getUsuarioLogueado().getUsuaApellidos();

	}

	public String consultarOfertaAClonar() {
		String navega = null;
		prodCabeceraProformaModificar = new ProdCabeceraProforma();
		prodConfigBasPresupues = new ProdConfigBasPresupues();
		try {

			System.out.println("Si entra a consultar");
			prodCabeceraProformaModificar = prodCabeceraProformaSeleccionado;
			prodConfigBasPresupues = servicioClonarOfertasBean
					.consultaBasePresupuestariaPorId(prodCabeceraProformaModificar
							.getBaprId());
			numeroOfertaOriginal = prodCabeceraProformaModificar
					.getCaprAnioOferta()
					+ " - "
					+ prodCabeceraProformaModificar.getCaprCodOferta();
			if (!prodConfigBasPresupues.getBaprId().equals("-1")) {
				nombreBase = prodConfigBasPresupues.getBaprAnio() + " - "
						+ prodConfigBasPresupues.getBaprMes();
				habilitarBoton = true;
			} else {
				habilitarBoton = false;
			}
			navega = "proformaaclonar";
		} catch (Exception e) {
			ExceptionClass.registrarException(e.getCause(),
					ClonarOfertasBean.class.getName(), ParametrosWeb.capa,
					Level.SEVERE);
		}
		return navega;
	}

	public String clonarOfertas() {
		RequestContext context = RequestContext.getCurrentInstance();
		boolean loggedIn = false;

		try {

			if (validarProformaSuperior()) {
				inicializarValores();
				prodCabeceraProforma.setBaprId(codigoBasePresupeustal);
				prodCabeceraProforma.setCaprCodDkP(codigoDKP);
				prodCabeceraProforma.setCaprFecha(fechaRegistroOferta);
				prodCabeceraProforma.setCaprValidezOferta(tiempoValidezOferta);
				prodCabeceraProforma.setCaprDetalle(detalleOferta);
				prodCabeceraProforma.setCaprTipoPresupuesto(prodCabeceraProformaModificar.getCaprTipoPresupuesto());// Asignar
																				// el
																				// original,
																				// responsable
																				// coercial
																				// en
																				// blanco
				prodCabeceraProforma.setCaprTiempoEjecucion(tiempoEjecucion);
				prodCabeceraProforma.setCaprTipoOperacion(prodCabeceraProformaModificar.getCaprTipoOperacion());// Asignar
																			// el
																			// original

				Calendar calendar = Calendar.getInstance();
				calendar.setTime(fechaRegistroOferta);
				int anio = calendar.get(Calendar.YEAR);
				prodCabeceraProforma.setCaprAnioOferta(anio);
				codCliente = prodCabeceraProformaModificar.getProdClientes()
						.getClieId();
				codResponsableComercial = prodCabeceraProformaModificar
						.getProdPersonas().getPersId();

				// mensaje=servicioClonarOfertasBean.crearCabeceraProforma(usuarioLogueado.getUsuarioLogueado(),
				// codEstadoOferta, codResponsableComercial, codCliente,
				// prodCabeceraProforma);
				// mensaje=servicioClonarOfertasBean.crearCabeceraProforma(usuarioLogueado.getUsuarioLogueado(),
				// codEstadoOferta, codResponsableComercial, codCliente,
				// prodCabeceraProforma);
				mensaje = servicioClonarOfertasBean.clonarFactura(
						usuarioLogueado.getUsuarioLogueado(), codEstadoOferta,
						codResponsableComercial, codCliente,
						prodCabeceraProforma,
						prodCabeceraProformaModificar.getCaprId());

				if (mensaje.getIdEntidad() > 0) {
					loggedIn = true;
					mostrarBotonVentana = true;
					mensaje.setContenidoMensaje(ParametrosWeb.valor_guardado);
					mensaje.setPathImagen(ParametrosWeb.imagen_exito);
					prodCabeceraProforma = new ProdCabeceraProforma();
					mensaje.setAccionATomar("proformamodificatab");// index
					mensaje.setExpirarBean(true);
					mensaje.setBeanAexpirar("clonarOfertasBean");
					contextoMensaje.setFaceContextMensaje("dato.mensaje",
							mensaje);
					Auditoria audi = new Auditoria();
					audi = auditoria.crearAuditoria(1,
							usuarioLogueado.getUsuarioLogueado(),
							mensaje.getIdEntidad(),
							ParametrosWeb.estado_proforma_abierto_edicion);

					servicioAdminSeguridadBean.guardarSuceso(audi);
				} else {
					loggedIn = true;
					mostrarBotonVentana = false;
					mensaje.setContenidoMensaje(ParametrosWeb.valor_no_guardado);
					mensaje.setPathImagen(ParametrosWeb.imagen_error);
					contextoMensaje.setFaceContextMensaje("dato.mensaje",
							mensaje);
					prodCabeceraProforma = new ProdCabeceraProforma();
				}
			} else {
				loggedIn = true;
				mostrarBotonVentana = false;
				mensaje.setContenidoMensaje("Oferta no clonada, la Base presupuestal debe ser igual o mayor.");
				mensaje.setPathImagen(ParametrosWeb.imagen_error);
				contextoMensaje.setFaceContextMensaje("dato.mensaje", mensaje);

			}

		} catch (Exception e) {
			loggedIn = true;
			mostrarBotonVentana = false;
			mensaje.setPathImagen(ParametrosWeb.imagen_error);
			mensaje.setContenidoMensaje("Error");
			mensaje.setAccionATomar(null);
			mostrarPanel = ParametrosWeb.panel_mensaje;
			contextoMensaje.setFaceContextMensaje("dato.mensaje", mensaje);
			e.printStackTrace();
		}
		context.addCallbackParam("loggedIn", loggedIn);
		return null;

	}

	public void cerrarMensaje() {

	}

	public boolean validarProformaSuperior() {

		if (codigoBasePresupeustal >= Integer.valueOf(prodConfigBasPresupues
				.getBaprId()))
			return true;
		else
			return false;
	}

	public void inicializarValores() {
		prodCabeceraProforma = new ProdCabeceraProforma();
		usuarioLogueado = (AccesoSistemaBean) contextoUsuario
				.getFaceContextMensaje("accesoSistemaBean");
		codigoDKP = "0";
		numeroOferta = 0;
		codCliente = 0;
		nombreCiente = null;
		direccionCliente = null;
		fechaRegistroOferta = new Date();
		nombrePresupuestador = usuarioLogueado.getUsuarioLogueado()
				.getUsuaNombres()
				+ " "
				+ usuarioLogueado.getUsuarioLogueado().getUsuaApellidos();
		tiempoValidezOferta = ParametrosWeb.validez_oferta;
		detalleOferta = null;
		codEstadoOferta = 1;
		codSucursal = usuarioLogueado.getUsuarioLogueado().getProdSucursales()
				.getSucuId();
		codTipoPresupuesto = ParametrosWeb.cod_tipo_presupuesto;
		codResponsableComercial = -1;
		tiempoEjecucion = ParametrosWeb.tiempo_ejecucion;
		codTipoOperacion = ParametrosWeb.cod_tipo_operacion;
		// codBasePresupuestal=-1;
	}

	public AccesoSistemaBean getUsuarioLogueado() {
		return usuarioLogueado;
	}

	public void setUsuarioLogueado(AccesoSistemaBean usuarioLogueado) {
		this.usuarioLogueado = usuarioLogueado;
	}

	public String getFechaMasHoraActual() {
		return fechaMasHoraActual;
	}

	public void setFechaMasHoraActual(String fechaMasHoraActual) {
		this.fechaMasHoraActual = fechaMasHoraActual;
	}

	public String getNombrePresupuestador() {
		return nombrePresupuestador;
	}

	public void setNombrePresupuestador(String nombrePresupuestador) {
		this.nombrePresupuestador = nombrePresupuestador;
	}

	public int getIdOferta() {
		return idOferta;
	}

	public void setIdOferta(int idOferta) {
		this.idOferta = idOferta;
	}

	public String getGenerarPdf() {
		return generarPdf;
	}

	public void setGenerarPdf(String generarPdf) {
		this.generarPdf = generarPdf;
	}

	public String getViendeDe() {
		return viendeDe;
	}

	public void setViendeDe(String viendeDe) {
		this.viendeDe = viendeDe;
	}

	public ProdCabeceraProforma getProdCabeceraProformaModificar() {
		return prodCabeceraProformaModificar;
	}

	public void setProdCabeceraProformaModificar(
			ProdCabeceraProforma prodCabeceraProformaModificar) {
		this.prodCabeceraProformaModificar = prodCabeceraProformaModificar;
	}

	public ProdCabeceraProforma getProdCabeceraProformaVisualizar() {
		return prodCabeceraProformaVisualizar;
	}

	public void setProdCabeceraProformaVisualizar(
			ProdCabeceraProforma prodCabeceraProformaVisualizar) {
		this.prodCabeceraProformaVisualizar = prodCabeceraProformaVisualizar;
	}

	public ProdCabeceraProforma getProdCabeceraProformaSeleccionado() {
		return prodCabeceraProformaSeleccionado;
	}

	public void setProdCabeceraProformaSeleccionado(
			ProdCabeceraProforma prodCabeceraProformaSeleccionado) {
		this.prodCabeceraProformaSeleccionado = prodCabeceraProformaSeleccionado;
	}

	public static long getSerialversionuid() {
		return serialVersionUID;
	}

	public ProdConfigBasPresupues getProdConfigBasPresupues() {
		return prodConfigBasPresupues;
	}

	public void setProdConfigBasPresupues(
			ProdConfigBasPresupues prodConfigBasPresupues) {
		this.prodConfigBasPresupues = prodConfigBasPresupues;
	}

	public boolean isHabilitarBoton() {
		return habilitarBoton;
	}

	public void setHabilitarBoton(boolean habilitarBoton) {
		this.habilitarBoton = habilitarBoton;
	}

	public String getNombreBase() {
		return nombreBase;
	}

	public void setNombreBase(String nombreBase) {
		this.nombreBase = nombreBase;
	}

	public int getCodigoBasePresupeustal() {
		return codigoBasePresupeustal;
	}

	public void setCodigoBasePresupeustal(int codigoBasePresupeustal) {
		this.codigoBasePresupeustal = codigoBasePresupeustal;
	}

	public ProdCabeceraProforma getProdCabeceraProforma() {
		return prodCabeceraProforma;
	}

	public void setProdCabeceraProforma(
			ProdCabeceraProforma prodCabeceraProforma) {
		this.prodCabeceraProforma = prodCabeceraProforma;
	}

	public MensajeContext getContextoUsuario() {
		return contextoUsuario;
	}

	public void setContextoUsuario(MensajeContext contextoUsuario) {
		this.contextoUsuario = contextoUsuario;
	}

	public MensajeContext getContextoMensaje() {
		return contextoMensaje;
	}

	public void setContextoMensaje(MensajeContext contextoMensaje) {
		this.contextoMensaje = contextoMensaje;
	}

	public Mensaje getMensaje() {
		return mensaje;
	}

	public void setMensaje(Mensaje mensaje) {
		this.mensaje = mensaje;
	}

	public String getNumeroOfertaOriginal() {
		return numeroOfertaOriginal;
	}

	public void setNumeroOfertaOriginal(String numeroOfertaOriginal) {
		this.numeroOfertaOriginal = numeroOfertaOriginal;
	}

	public String getMostrarPanel() {
		return mostrarPanel;
	}

	public void setMostrarPanel(String mostrarPanel) {
		this.mostrarPanel = mostrarPanel;
	}

	public String getCodigoDKP() {
		return codigoDKP;
	}

	public void setCodigoDKP(String codigoDKP) {
		this.codigoDKP = codigoDKP;
	}

	public int getNumeroOferta() {
		return numeroOferta;
	}

	public void setNumeroOferta(int numeroOferta) {
		this.numeroOferta = numeroOferta;
	}

	public int getCodCliente() {
		return codCliente;
	}

	public void setCodCliente(int codCliente) {
		this.codCliente = codCliente;
	}

	public String getNombreCiente() {
		return nombreCiente;
	}

	public void setNombreCiente(String nombreCiente) {
		this.nombreCiente = nombreCiente;
	}

	public String getDireccionCliente() {
		return direccionCliente;
	}

	public void setDireccionCliente(String direccionCliente) {
		this.direccionCliente = direccionCliente;
	}

	public Date getFechaRegistroOferta() {
		return fechaRegistroOferta;
	}

	public void setFechaRegistroOferta(Date fechaRegistroOferta) {
		this.fechaRegistroOferta = fechaRegistroOferta;
	}

	public String getTiempoValidezOferta() {
		return tiempoValidezOferta;
	}

	public void setTiempoValidezOferta(String tiempoValidezOferta) {
		this.tiempoValidezOferta = tiempoValidezOferta;
	}

	public String getDetalleOferta() {
		return detalleOferta;
	}

	public void setDetalleOferta(String detalleOferta) {
		this.detalleOferta = detalleOferta;
	}

	public int getCodEstadoOferta() {
		return codEstadoOferta;
	}

	public void setCodEstadoOferta(int codEstadoOferta) {
		this.codEstadoOferta = codEstadoOferta;
	}

	public int getCodSucursal() {
		return codSucursal;
	}

	public void setCodSucursal(int codSucursal) {
		this.codSucursal = codSucursal;
	}

	public String getCodTipoPresupuesto() {
		return codTipoPresupuesto;
	}

	public void setCodTipoPresupuesto(String codTipoPresupuesto) {
		this.codTipoPresupuesto = codTipoPresupuesto;
	}

	public int getCodResponsableComercial() {
		return codResponsableComercial;
	}

	public void setCodResponsableComercial(int codResponsableComercial) {
		this.codResponsableComercial = codResponsableComercial;
	}

	public String getTiempoEjecucion() {
		return tiempoEjecucion;
	}

	public void setTiempoEjecucion(String tiempoEjecucion) {
		this.tiempoEjecucion = tiempoEjecucion;
	}

	public String getCodTipoOperacion() {
		return codTipoOperacion;
	}

	public void setCodTipoOperacion(String codTipoOperacion) {
		this.codTipoOperacion = codTipoOperacion;
	}

	public boolean isMostrarBotonVentana() {
		return mostrarBotonVentana;
	}

	public void setMostrarBotonVentana(boolean mostrarBotonVentana) {
		this.mostrarBotonVentana = mostrarBotonVentana;
	}

}
